import 'package:demo/app/modules/apply/face_error/face_error_code.dart';
import 'package:get/get.dart';

class FaceErrorController extends GetxController {

  /// 认证状态，取值如下：
  /// 0 ： 正常
  /// 1 ： 身份证号与姓名不匹配或该身份证号不存在
  /// 2 ： 公安网图片不存在或质量过低
  var verifyStatus = 0;

  /// 判断设备是否发生过风险行为来判断风险级别，取值（数值由高到低）：
  /// 1 ：高危、2 ：嫌疑、3 ：普通、4 ：正常
  var riskLevel = 4;

  var noNet = false.obs; // 是否没有网
  var showBtn2 = true.obs; // 是否显示第二个按钮
  var msg = ''.obs;
  var tips = ''.obs;
  var btn1 = '重新采集'.obs;

  @override
  void onInit() {
    super.onInit();

    var errCode = Get.arguments['err_code'];
    verifyStatus = Get.arguments['verify_status'];
    riskLevel = Get.arguments['risk_level'];

    judgeErrorCode(errCode);
  }

  void judgeErrorCode(int errCode) {
    if(riskLevel == 1 || riskLevel == 2){
      msg.value = '身份核验失败';
      tips.value = '';
    } else if (errCode == FaceErrorCode.VERIFY_NO_PICTURE_50 || errCode == FaceErrorCode.VERIFY_NO_PICTURE_55 || verifyStatus == 2){
      msg.value = '公安网不存在或质量低';
      tips.value = '请到派出所更新身份证图片';
      btn1.value = '关闭';
      showBtn2.value = false;
    } else if (errCode == FaceErrorCode.VERIFY_LIVENESS_FAILURE){ // 姓名与身份证不匹配或分值低
      msg.value = '身份核验失败';
      tips.value = '请确保是本人操作且正脸采集';
    } else if(userInfoError(errCode, verifyStatus)){ // 质量检测未通过
      msg.value = '身份核验失败';
      tips.value = '请确保是本人操作且正脸采集';
    } else if(errCode == FaceErrorCode.VERITY_QUALITY_FAILURE){
      msg.value = '身份核验失败';
      tips.value = '请确保正脸采集且清晰完整';
    } else if (netWorkError(errCode)){
      msg.value = '网络连接失败';
      tips.value = '请检查网络';
      btn1.value = '重试';
      noNet.value = true;
    }else {
      msg.value = '身份核验失败';
      tips.value = '请确保正脸采集且清晰完整';
      btn1.value = '重试';
    }
  }

  // 减少方法圈数 BugBye MethodComplexityCheck
  bool userInfoError(int errCode, int verifyStatus) {
    return errCode == FaceErrorCode.VERITY_NO_MATCH_51
      || errCode == FaceErrorCode.VERITY_NO_MATCH_54
      || errCode == FaceErrorCode.VERITY_NO_MATCH_60
      || errCode == FaceErrorCode.LOW_SCORE
      || verifyStatus == 1;
  }

  bool netWorkError(int errCode) {
    return errCode == FaceErrorCode.JSON_PARSE_ERROR
      || errCode == FaceErrorCode.NETWORK_REQUEST_ERROR
      || errCode == FaceErrorCode.VERIFY_NET_ERROR_222361
      || errCode == FaceErrorCode.VERIFY_NET_ERROR_282105;
  }
}
